package com.cawring.simple.route;

import java.io.Serializable;

import org.apache.commons.lang3.StringUtils;

public class RouteVO implements Serializable {

	private static final long serialVersionUID = 201403061318L;

	/* 메소드 : GET, POST */
	private String method;
	
	/* 컨트롤러 */
	private String controller;
	
	/* 메소드 - 컨트롤러에 포함된 메소드 */
	private String def;
	
	/* URL Path */
	private String url;
	
	/* 컨트롤러의 경로부터 메소드까지 */
	private String packagePath;
	
	/**
	 * <pre>
	 * 메소드명     : 생성자 메소드
	 * 메소드작성일 : 2014. 3. 12.
	 * 메소드설명   :
	 * packagePath를 통해 controller와 def 값을 가진다.
	 * </pre>
	 * @return
	 */
	public RouteVO(String method, String url, String packagePath)
	{
		this.method      = method;
		this.url         = url;
		this.packagePath = packagePath;
		
		/* package경로가 없는 경우 */
		if(packagePath == null) return;
		
		/* 마지막 점을 찾는다.(컨트롤러와 메소드의 경계) */
		int lastDotIdx = StringUtils.lastIndexOf(packagePath, ".");
		
		/* 컨트롤러(class)명과 메소드명 추출 */
		this.controller = StringUtils.substring(packagePath, 0, lastDotIdx); // 컨트롤러
		this.def 		= StringUtils.substring(packagePath, lastDotIdx+1);  // 메소드명
	}
	
	/**
	 * 
	 * <pre>
	 * 메소드명     : VO가 비어있지 않은 경우
	 * 메소드작성일 : 2014. 3. 11.
	 * 메소드설명   :
	 * VO의 인스턴스변수가 모두 채워 있는 경우에 true
	 * 나머지 경우는 false를 반환한다.
	 * </pre>
	 * @return isNotEmpty ? true : false
	 */
	public boolean isNotEmpty()
	{
		/* is not empty */
		boolean isMethod = (this.method != null);      // method
		boolean isUrl    = (this.url    != null);      // path
		boolean isCont   = (this.packagePath != null); // controller
		
		/* 인스턴스 변수 모두가 null이 아닌 경우 true */
		if(isMethod && isUrl && isCont) return true;
		
		/* 하나라도 null이 있으면 false */
		return false;
	}
	
	public String getDef() {
		return def;
	}



	public void setDef(String def) {
		this.def = def;
	}



	public String getPackagePath() {
		return packagePath;
	}



	public void setPackagePath(String packagePath) {
		this.packagePath = packagePath;
	}



	public String getMethod() {
		return method;
	}

	public void setMethod(String method) {
		this.method = method;
	}

	public String getController() {
		return controller;
	}

	public void setController(String controller) {
		this.controller = controller;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("RouteVO [method=");
		builder.append(method);
		builder.append(", controller=");
		builder.append(controller);
		builder.append(", def=");
		builder.append(def);
		builder.append(", url=");
		builder.append(url);
		builder.append(", packagePath=");
		builder.append(packagePath);
		builder.append("]");
		return builder.toString();
	}
}